#ifndef DWARF__LOCATION_H
#define DWARF__LOCATION_H

#include <cstddef>

namespace dwarf {

class Location {
public:
	enum Type {
		TYPE_ERROR,
		TYPE_END,
		TYPE_ADDRESS,
		TYPE_SYNTHETIC_POINTER,
		TYPE_OPTIMIZED_OUT
	};
private:
	Type type_;
	const void *address_;
	size_t size_;
public:
	Location(Type _type);
	Location(Type _type, const void *_address, size_t _size);
	Location(const Location &_location);
	~Location();
public:
	Type getType() const;
	void setType(Type _type);
	const void *getAddress() const;
	void setAddress(const void *_address);
	size_t getSize() const;
	void setSize(size_t _size);
};

}

#endif // DWARF__LOCATION_H
